package interface_JDK_0918.comparable;

import interface_JDK_0918.comparable.Student;

import java.util.Arrays;

public class Test {
    public static void main(String[] args) {
        //此时没有产生Student对象，对于对象数组来说，没有新开辟对象，所有数组值默认为null
//        Student[] students=new Student[3];
//        students[0]=new Student("小漂",23);
//        students[1]=new Student("小冷",16);
//        students[2]=new Student("小拽",74);
//  会报错，出现类型错误
//  咱们定义的类型，java编译器也不知道按照哪个属性决定大小！
//  自定类型用ComparableTo方法
//        Arrays.sort(students);
//        System.out.println(students[0].getScore());
        Student student1=new Student("小茶",89);
        Student student2=new Student("小乖",77);
        System.out.println(student1.compareTo(student2));
        //会报错
//        String str="hello bit";
//        System.out.println(student1.compareTo(str));
        Student[] students=new Student[3];
        students[0]=new Student("小漂",23);
        students[1]=new Student("小冷",16);
        students[2]=new Student("小拽",74);
        System.out.println("排序之前的数组");
        for (Student student:students) {
            student.showStu();
        }
        Arrays.sort(students);//调用系统
        sort(students);//自己实现
        System.out.println("__________________");
        System.out.println("排序之后的数组");
        for (Student student:students) {
            student.showStu();
        }

    }

    /**
     * 调用sort方法时，不知道也不关心具体子类什么类型，只要子类实现Comparable方法
     * 都可以调用sort
     * 向上转型
     * @param arr
     */
    //自己实现的排序
    public static void sort(Comparable[]arr){
        for(int i=0;i<arr.length;i++){
            boolean isSwaped=false;
            for (int j = 0; j < arr.length-1-i; j++) {
                if(arr[j].compareTo(arr[j+1])>0){
                    Comparable tmp=arr[j];
                    arr[j]=arr[j+1];
                    arr[j+1]=tmp;
                    isSwaped=true;
                }
            }
            //内层没有交换，排序完成
            if(!isSwaped){
                return;
            }
        }
    }
}
